Passed
Pull Request — master (#442)
by
unknown
06:14 queued 03:58
created

GetLeaveRequestsOverviewQueryHandler.execute   A

Complexity

Conditions 1

Size

Total Lines 23
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 21
dl 0
loc 23
c 0
b 0
f 0
rs 9.376
cc 1
1
import { Inject } from '@nestjs/common';
2
import { QueryHandler } from '@nestjs/cqrs';
3
import { GetLeaveRequestsOverviewQuery } from './GetLeaveRequestsOverviewQuery';
4
import { ILeaveRequestsOverview } from 'src/Domain/HumanResource/Leave/ILeaveRequestsOverview';
5
import { IDateUtils } from 'src/Application/IDateUtils';
6
import { ILeaveRepository } from 'src/Domain/HumanResource/Leave/Repository/ILeaveRepository';
7
8
@QueryHandler(GetLeaveRequestsOverviewQuery)
9
export class GetLeaveRequestsOverviewQueryHandler {
10
  constructor(
11
    @Inject('IDateUtils')
12
    private readonly dateUtils: IDateUtils,
13
    @Inject('ILeaveRepository')
14
    private readonly leaveRepository: ILeaveRepository
15
  ) {}
16
17
  public async execute(
18
    query: GetLeaveRequestsOverviewQuery
19
  ): Promise<ILeaveRequestsOverview> {
20
    const [startDate, endDate] = this.dateUtils.getLeaveReferencePeriodDays(
21
      query.date
22
    );
23
24
    const numDaysPerWeek = this.dateUtils.getWorkedDaysPerWeek();
25
    const numWeeks = this.dateUtils.getNumberOfPaidLeaveWeeks();
26
    const daysPerYear = numWeeks * numDaysPerWeek;
27
    const totalDurationTaken = await this.leaveRepository.getSumOfDurationsBetween(
28
      startDate,
29
      endDate,
30
      query.user
31
    );
32
    const daysTaken = this.dateUtils.getLeaveDurationAsDays(totalDurationTaken);
33
    const daysRemaining = daysPerYear - daysTaken;
34
35
    return {
36
      daysPerYear,
37
      daysTaken,
38
      daysRemaining
39
    };
40
  }
41
}
42